home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / The World of Computer Software.iso / cmdlg7.zip / PRINTDLG.PAS < prev    next >
Pascal/Delphi Source File  |  1992-12-10  |  5KB  |  204 lines

  1. {µµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµ}
  2. {   \\\                                    }
  3. {  -(j)-                                   }
  4. {    /juanca                               }
  5. {    ~                                     }
  6. {   ⌐ ACASA 1989-1992, All rights reserved }
  7. {µµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµ}
  8.  
  9. {Shell objects around the Print and PrinterSetup dialogs }
  10.  
  11. UNIT PRINTDLG;
  12. {$C MOVEABLE DEMANDLOAD DISCARDABLE}
  13. INTERFACE
  14.   USES
  15.     WINTYPES,
  16.     OBJECTS,
  17.     OWINDOWS,
  18.     ODIALOGS,
  19.     COMMDLG,
  20.     COMONDLG;
  21.  
  22.              
  23.   TYPE
  24.     pPrintSetupDlg = ^tPrintSetupDlg;
  25.     tPrintSetupDlg = OBJECT ( tCommonDlg )
  26.  
  27.       printerData : pPrintDlg;
  28.  
  29.       CONSTRUCTOR
  30.       init(iparent:PWindowsObject; name :PChar; idata :pPrintDlg);
  31.  
  32.       PROCEDURE
  33.       preparePrinterData;
  34.         virtual;
  35.  
  36.       FUNCTION
  37.       printFlags :Longint;
  38.         virtual;
  39.  
  40.       FUNCTION
  41.       execute:Integer;
  42.         virtual;
  43.  
  44.     END;
  45.  
  46.     pPrintOptDlg = ^tPrintOptDlg;
  47.     tPrintOptDlg = OBJECT ( tPrintSetupDlg)
  48.  
  49.       setupDlg :pPrintSetupDlg;
  50.  
  51.  
  52.       CONSTRUCTOR
  53.       init(iparent:PWindowsObject; name :PChar; idata :pPrintDlg; isetup :pPrintSetupDlg);
  54.  
  55.       DESTRUCTOR
  56.       done;
  57.         virtual;
  58.  
  59.       PROCEDURE
  60.       preparePrinterData;
  61.         virtual;
  62.  
  63.     END;
  64.  
  65. {****************************************************************}
  66. IMPLEMENTATION
  67.  
  68.  
  69.       CONSTRUCTOR
  70.       tPrintSetupDlg.
  71.       {}
  72.       init(iparent:PWindowsObject; name :PChar; idata :pPrintDlg);
  73.         begin
  74.           inherited init(iparent, name);
  75.           printerData := iData;
  76.         end;
  77.  
  78.       FUNCTION
  79.       tPrintSetupDlg.
  80.       {}
  81.       printFlags :Longint;
  82.         begin
  83.           printFlags := 0
  84.         end;
  85.  
  86.       PROCEDURE
  87.       tPrintSetupDlg.
  88.       {}
  89.       preparePrinterData;
  90.         begin
  91.           with printerData^
  92.           do begin
  93.             lStructSize   := sizeof(printerData^);
  94.             hInstance     := SYSTEM.HInstance;
  95.             if parent <> nil
  96.             then
  97.               hwndOwner   := parent^.hWindow
  98.             else
  99.               hwndOwner   := 0;
  100.             lpSetupTemplateName:= attr.Name;
  101.             flags         := flags or pd_PrintSetup or printFlags;
  102.  
  103.             lCustData    := Longint(@Self);  {this does nothing, but could be usefull}
  104.  
  105.             move(Self.instance, lpfnPrintHook, sizeOf(lpfnPrintHook)); {this does the trick!}
  106.  
  107.             if (lpSetupTemplateName <> nil)
  108.             then
  109.               flags := flags or pd_EnableSetupTemplate;
  110.             move(Self.instance, lpfnSetupHook, sizeOf(lpfnSetupHook));
  111.             flags := flags or pd_EnableSetupHook
  112.           end;
  113.         end;
  114.  
  115.  
  116.       FUNCTION
  117.       tPrintSetupDlg.
  118.       {}
  119.       execute:Integer;
  120.         var
  121.           result :Integer;
  122.           oldKBHandler :pWindowsObject;
  123.         begin
  124.           preparePrinterData;
  125.           oldKbHandler := Application^.KBHandlerWnd;
  126.           isModal      := TRUE;  { this is very important, object gets freed twice otherwise !}
  127.           if COMMDLG.printDlg(printerData^)
  128.           then
  129.             execute := id_Ok
  130.           else begin
  131.             result := commDlgExtendedError;
  132.             if result = 0
  133.             then
  134.               execute := id_Cancel
  135.             else begin
  136.               execute := -result;
  137.               status  := em_InvalidWindow
  138.             end;
  139.           end;
  140.           with printerData^
  141.           do begin
  142.             @lpfnSetupHook := nil;
  143.             @lpfnPrintHook := nil;
  144.             lpSetupTemplateName := nil;
  145.             lpPrintTemplateName := nil;
  146.             { clear flags used for dialog }
  147.             flags := flags and not ( pd_EnableSetupTemplate or
  148.                                      pd_EnablePrintTemplate or
  149.                                      pd_EnableSetupHook     or
  150.                                      pd_EnablePrintHook
  151.                                      );
  152.           end;
  153.           hwindow := 0;
  154.           isModal := FALSE;
  155.           Application^.KBHandlerWnd := OldKbHandler;
  156.         end;
  157.  
  158.       CONSTRUCTOR
  159.       tPrintOptDlg.
  160.       {}
  161.       init(iparent:PWindowsObject; name :PChar; idata :pPrintDlg; isetup :pPrintSetupDlg);
  162.         begin
  163.           inherited init(iparent, name, iData);
  164.           setupDlg  := isetup;
  165.           if setupDlg <> nil
  166.           then
  167.             setupDlg^.printerData := printerData
  168.         end;
  169.  
  170.       DESTRUCTOR
  171.       tPrintOptDlg.
  172.       {}
  173.       done;
  174.         begin
  175.           if setupDlg <> nil
  176.           then
  177.             setupDlg^.free;
  178.           inherited done
  179.         end;
  180.  
  181.  
  182.       PROCEDURE
  183.       tPrintOptDlg.
  184.       {}
  185.       preparePrinterData;
  186.         begin
  187.           inherited preparePrinterData;
  188.           with printerData^
  189.           do begin
  190.             if setupDlg <> nil
  191.             then
  192.               setupDlg^.preparePrinterData;
  193.             lpPrintTemplateName:= attr.Name;
  194.             move(Self.instance, lpfnPrintHook, sizeOf(lpfnPrintHook));
  195.             flags := flags and not pd_PrintSetup;
  196.  
  197.             if (lpPrintTemplateName <> nil)
  198.             then
  199.               flags := flags or pd_EnablePrintTemplate
  200.           end
  201.  
  202.         end;
  203.  
  204. END.